#ifndef UNIVERSE_H_
#define UNIVERSE_H_

#include "userconfig.h"
#include "World.h"
#include "SpatialPartitioningType.h"
#include "SpatialPartitioningConfig.h"

namespace physicsworks {

class Universe {
public:
	virtual ~Universe() {}
	virtual void add(World* w) = 0;
	virtual void remove(World* w) = 0;
	virtual void removeAll() = 0;
	virtual World** getWorldsList(int* size) = 0;
	virtual World* instanceWorld(real aX, real aY, real aZ, real bX, real bY, real bZ,
	                             SpatialPartitioningType s, const SpatialPartitioningConfig& sc) const = 0;
	virtual Body* instanceBody(const real* vertX, const real* vertY, const real* vertZ, int numVertices,
	                           const int* verticesIndices, int numFaces) const = 0;
	virtual Body* instanceSphereBody(real radius) const = 0;
	virtual Body* instanceCubeBody(real radius) const = 0;
	virtual Body* instanceBoxBody(real radiusX, real radiusY, real radiusZ) const = 0;
};

}

#endif /*UNIVERSE_H_*/
